import { Route, Redirect } from "react-router-dom";
import { getToken } from "@/utils";
// 需求：要延续原有Route组件的功能
// 需求：在渲染组件之前，加上一个鉴权的判断
//        1.登录   显示component配置的组件即可
//        2.没登录   重定向到登录页面
//        3.没登录   需要把当前你访问的路由地址，传达给登录页面，登录完毕后需要跳转到你原本访问的路由地址

// 将来使用：<AuthRoute path="/" component={Layout}></AuthRoute>
const AuthRoute = ({ component: Component, ...rest }) => {
  // Component 登录后渲染的组件，rest是Route的其他属性
  // Route 提供了一个render属性，可以在渲染组件之前加上逻辑处理
  return (
    <Route
      {...rest}
      render={props => {
        // return 什么就渲染什么，不需要通过component属性去指定
        if (!getToken()) {
          // 如果没登录
          return (
            <Redirect
              to={{
                // 路由地址
                pathname: "/login",
                // 路由传值使用state属性内存中（数据）
                state: {
                  // 登录完毕需要跳转的地址
                  returnUrl: props.location.pathname
                }
              }}
            />
          );
        }
        return <Component />;
      }}
    />
  );
};

export default AuthRoute;
